# Python 的元组与列表类似，不同之处在于元组的元素不能修改
# 元组使用小括号，列表使用方括号。
# 元组创建很简单，只需要在括号中添加元素，并使用逗号隔开即可。
tup1 = ('Google', 'Baidu', 1997, 2000)
tup2 = (1, 2, 3, 4, 5)
tup3 = "a", "b", "c", "d"  # 不需要括号也可以
print(type(tup3))  # <class 'tuple'>

# 创建空元组
tup1 = ()
print(tup1)
# 注意 元组中只包含一个元素时，需要在元素后面添加逗号，否则括号会被当作运算符使用
tup1 = (50)
print(type(tup1))  # 不加逗号，类型为整型 <class 'int'>

# 元组与字符串类似，下标索引从0开始，可以进行截取，组合等。
tup1 = ('Google', 'Baidu', 1997, 2000)
tup2 = (1, 2, 3, 4, 5, 6, 7)

print("tup1[0]: ", tup1[0])  # tup1[0]:  Google
print("tup2[1:5]: ", tup2[1:5])  # tup2[1:5]:  (2, 3, 4, 5)

# 元组的数据不可修改 如下是非法操作
# tup1[0] = 100 # 报错 TypeError: 'tuple' object does not support item assignment

# 对元组进行连接组合
tup1 = ('Google', 'Baidu', 1997, 2000)
tup2 = (1, 2, 3, 4, 5, 6, 7)
tup3 = tup1 + tup2
print(tup3)  # ('Google', 'Baidu', 1997, 2000, 1, 2, 3, 4, 5, 6, 7)

# 删除元组
# 元组中的元素值是不允许删除的，但我们可以使用del语句来删除整个元组 在打印就报错
tup1 = ('Google', 'Baidu', 1997, 2000)
del tup1
# print(tup1)  # NameError: name 'tup1' is not defined

# 元组运算符
print(len((1, 2, 3)))  # 计算长度 3
print((1, 2, 3) + (4, 5, 6))  # 链接 (1, 2, 3, 4, 5, 6)
print(('Hi!',) * 4)  # 复制
print(3 in (1, 2, 3))  # True
# 迭代
for x in (1, 2, 3):
    print(x, )

# 元素截取
# 注意点 元组和列表 在Python里面有两种遍历方式 从前往后 0 ~ n-1 从后到前 -1 ~ -n
tup1 = ('Google', 'Baidu', 1997, 2000, 7676786, 123)
print(tup1[0])  # Google
print(tup1[-3])  # 2000
print(tup1[1:])  # ('Baidu', 1997, 2000, 7676786, 123)
print(tup1[2:5:1])  # (1997, 2000, 7676786)
print(tup1[2:5:2])  # (1997, 7676786)
print(tup1[2:5:3])  # (1997,)
